home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / line13x / line13x.asm < prev   
Encoding:
Assembly Source File  |  1994-08-27  |  3.8 KB  |  218 lines

  1. procedure Drawline (x1, y1, x2, y2: integer; colour: byte);
  2. assembler;
  3. var difx, dify: integer;
  4.     d, inc1, inc2, inc3: integer;
  5. asm
  6.   mov dx,03c4h
  7.   mov al,02h
  8.   out dx,al
  9.  
  10.   @absolute_xdif:
  11.     mov ax,x1
  12.     sub ax,x2
  13.     cmp ax,0
  14.     jge @save_xdif
  15.        xor ax,0ffffh
  16.        inc ax
  17.     @save_xdif:
  18.       mov difx,ax
  19.  
  20.   @absolute_ydif:
  21.     mov ax,y1
  22.     sub ax,y2
  23.     cmp ax,0
  24.     jge @save_ydif
  25.       xor ax,0ffffh
  26.       inc ax
  27.     @save_ydif:
  28.       mov dify,ax
  29.  
  30.   @find_independant:
  31.     cld
  32.     mov ax,PageSeg
  33.     mov es,ax
  34.     mov ax,difx
  35.     cmp ax,dify
  36.     jl @yindependant
  37.  
  38.     @xindependant:
  39.       cmp difx,0
  40.       jz @line_done
  41.       mov ax,dify
  42.       shl ax,1
  43.       mov inc1,ax
  44.       mov ax,dify
  45.       sub ax,difx
  46.       shl ax,1
  47.       mov inc2,ax
  48.       mov ax,inc1
  49.       sub ax,difx
  50.       mov d,ax
  51.  
  52.       mov ax,x2
  53.       cmp ax,x1
  54.       jg @noswapx
  55.         mov ax,x1
  56.         mov bx,x2
  57.         mov x1,bx
  58.         mov x2,ax
  59.         mov ax,y1
  60.         mov bx,y2
  61.         mov y1,bx
  62.         mov y2,ax
  63.       @noswapx:
  64.         mov inc3,80
  65.         mov ax,y2
  66.         cmp ax,y1
  67.         jg @xadd
  68.         mov inc3,-80
  69.       @xadd:
  70.         mov ax,80
  71.         mul y1
  72.         mov bx,ax
  73.         mov ax,x1
  74.         shr ax,1
  75.         shr ax,1
  76.         add ax,bx
  77.         mov di,ax
  78.         mov ax,x1
  79.         and al,3
  80.         xchg ah,al
  81.         mov cl,ah
  82.         mov al,1
  83.         shl al,cl
  84.         mov dx,03c5h
  85.         out dx,al
  86.  
  87.         mov al,colour
  88.         mov bx,d
  89.  
  90.         mov cx,difx
  91.       @loopx:
  92.         stosb
  93.         dec di
  94.         inc ah
  95.         cmp ah,4
  96.         jnz @xnoinc_di
  97.           xor ah,ah
  98.           inc di
  99.  
  100.       @xnoinc_di:
  101.         push cx
  102.         mov ch,al
  103.         mov cl,ah
  104.         mov al,1
  105.         shl al,cl
  106.         out dx,al
  107.         mov al,ch
  108.         pop cx
  109.  
  110.         cmp bx,0
  111.         jl @loopx_noinc
  112.           add bx,inc2
  113.           add di,inc3
  114.           loop @loopx
  115.           jmp @line_done
  116.         @loopx_noinc:
  117.           add bx,inc1
  118.           loop @loopx
  119.           jmp @line_done
  120.  
  121.     @yindependant:
  122.       cmp dify,0
  123.       jz @line_done
  124.       mov ax,difx
  125.       shl ax,1
  126.       mov inc1,ax
  127.       mov ax,difx
  128.       sub ax,dify
  129.       shl ax,1
  130.       mov inc2,ax
  131.       mov ax,inc1
  132.       sub ax,dify
  133.       mov d,ax
  134.  
  135.       mov ax,y2
  136.       cmp ax,y1
  137.       jg @noswapy
  138.         mov ax,x1
  139.         mov bx,x2
  140.         mov x1,bx
  141.         mov x2,ax
  142.         mov ax,y1
  143.         mov bx,y2
  144.         mov y1,bx
  145.         mov y2,ax
  146.       @noswapy:
  147.         mov inc3,1
  148.         mov ax,x2
  149.         cmp ax,x1
  150.         jg @yadd
  151.           mov inc3,-1
  152.       @yadd:
  153.         mov ax,80
  154.         mul y1
  155.         mov bx,ax
  156.         mov ax,x1
  157.         shr ax,1
  158.         shr ax,1
  159.         add ax,bx
  160.         mov di,ax
  161.         mov ax,x1
  162.         and al,3
  163.         xchg ah,al
  164.         mov cl,ah
  165.         mov al,1
  166.         shl al,cl
  167.         mov dx,03c5h
  168.         out dx,al
  169.  
  170.         mov al,colour
  171.         mov bx,d
  172.  
  173.         mov cx,dify
  174.         inc cx
  175.       @loopy:
  176.         stosb
  177.         add di,79
  178.  
  179.         cmp bx,0
  180.         jl @loopy_noinc
  181.           add bx,inc2
  182.           cmp inc3,1
  183.           jz @inc3_pos
  184.             dec ah
  185.             cmp ah,255
  186.             jnz @ynoinc_di
  187.               add di,inc3
  188.               and ah,3
  189.               jmp @ynoinc_di
  190.  
  191.           @inc3_pos:
  192.             inc ah
  193.             cmp ah,4
  194.             jnz @ynoinc_di
  195.               add di,inc3
  196.               and ah,3
  197.         @ynoinc_di:
  198.           push cx
  199.           mov ch,al
  200.           mov cl,ah
  201.           mov al,1
  202.           shl al,cl
  203.           out dx,al
  204.           mov al,ch
  205.           pop cx
  206.  
  207.           loop @loopy
  208.           jmp @line_done
  209.         @loopy_noinc:
  210.           add bx,inc1
  211.           loop @loopy
  212.           jmp @line_done
  213.  
  214.     @line_done:
  215. end;
  216.  
  217.  
  218.